package org.ivwsqii.factory.simple;

/**
 * 	1、简单工厂模式的要点在于：当你需要什么，只需要传入一个正确的参数，
 *	      就可以获取你所需要的对象，而无须知道其创建细节。
 * 优点：
 *	1、工厂类含有必要的判断逻辑，可以决定在什么时候创建哪一个产品类的实例，
 *	2、客户端可以免除直接创建产品对象的责任，而仅仅“消费”产品；简单工厂模式通过这种做法实现了对责任的分割，
 *	它提供了专门的工厂类用于创建对象。
 *	3、客户端无须知道所创建的具体产品类的类名，只需要知道具体产品类所对应的参数即可，
 *	对于一些复杂的类名，通过简单工厂模式可以减少使用者的记忆量。
 *	4、通过引入配置文件，可以在不修改任何客户端代码的情况下更换和增加新的具体产品类，
 *	在一定程度上提高了系统的灵活性。
 * 缺点：
 *	1、由于工厂类集中了所有产品创建逻辑，一旦不能正常工作，整个系统都要受到影响。
 *	2、使用简单工厂模式将会增加系统中类的个数，在一定程序上增加了系统的复杂度和理解难度。
 *	系统扩展困难，一旦添加新产品就不得不修改工厂逻辑，在产品类型较多时，
 *	3、有可能造成工厂逻辑过于复杂，不利于系统的扩展和维护。
 *	4、简单工厂模式由于使用了静态工厂方法，造成工厂角色无法形成基于继承的等级结构。
 * @author wyl
 * 2018年12月13日
 * 	总结：
 *	 简单工厂模式最大的优点在于实现对象的创建和对象的使用分离，
 *	将对象的创建交给专门的工厂类负责，但是其最大的缺点在于工厂类不够灵活，
 *	增加新的具体产品需要修改工厂类的判断逻辑代码，而且产品较多时，工厂方法代码将会非常复杂。
 */
public class SimpleFactory {

	public IProduct createFruit(String fruitName) throws Exception {

		switch(fruitName.trim().toLowerCase()) {
			case "apple":
				return new AppleProduct();
			case "orange":
				return new OrangeProduct();
			case "banana":
				return new BananaProduct();
			default: throw new Exception("没有其他水果");

		}
	}

}
